package org.patterns.behavior.state;


/**
 * 受限状态：具体状态类
 * 处理账户在受限状态下的各种操作和状态转换逻辑
 */
public class RestrictedState extends AccountState {

    /**
     * 受限状态构造函数
     * @param state 前一个账户状态对象，用于继承账户上下文
     */
    public RestrictedState(AccountState state) {
        this.account = state.account;
    }

    /**
     * 存款操作
     * @param amount 存款金额，要求为非负数
     * 注：存款后会触发状态检查，可能转换到正常/透支状态
     */
    public void deposit(double amount) {
        account.setBalance(account.getBalance() + amount);
        stateCheck();
    }

    /**
     * 取款操作（受限状态下禁止执行）
     * @param amount 取款金额参数（实际不会处理）
     */
    public void withdraw(double amount) {
        System.out.println("帐号受限，取款失败");
    }

    /**
     * 利息计算操作
     * 用于在受限状态下执行利息计算逻辑
     */
    public void computeInterest() {
        System.out.println("计算利息！");
    }

    /**
     * 状态转换检查
     * 根据余额判断状态迁移规则：
     * 1. 余额>0 转换到正常状态
     * 2. -2000<余额<=0 转换到透支状态
     * 3. 余额<=-2000 保持受限状态
     */
    public void stateCheck() {
        // 状态转换条件判断块
        if(account.getBalance() > 0) {
            account.setState(new NormalState(this));
        }
        else if(account.getBalance() > -2000) {
            account.setState(new OverdraftState(this));
        }
    }
}

